package cn.czh.service.impl;

import cn.czh.domain.Middle;
import cn.czh.domain.Movie;
import cn.czh.domain.User;
import cn.czh.mapper.MiddleMapper;
import cn.czh.mapper.MovieMapper;
import cn.czh.service.IMovieService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

@Service
public class MovieServiceImpl implements IMovieService {
    @Autowired
    private MovieMapper movieMapper;

    @Autowired
    private MiddleMapper middleMapper;

    /**
     * 查询所有
     *
     * @return
     */
    @Override
    public List<Movie> findAll() {
        return movieMapper.findAll();
    }

    /**
     * 查询单个
     *
     * @param id
     * @return
     */
    @Override
    public Movie getById(Long id) {
        return movieMapper.getById(id);
    }

    /**
     * 随机赠送一张电影票
     *
     * @return
     */
    @Override
    public Movie random() {
        return movieMapper.random();
    }

    /**
     * 购票
     *
     * @param middle
     */
    @Override
    @Transactional
    public void buy(Middle middle) {
        //获取电影票信息
        Movie movie = movieMapper.getById(middle.getMovie_ticket_id());
        if (movie.getStock() < 1) { //如果库存小于1
            throw new RuntimeException("抱歉你选择得场次已售罄,请选择其它场次");
        } else {
            movie.setStock(movie.getStock() - 1); //售出一张总库存就减一
            movieMapper.update(movie); //更新数据

            //添加到中间表
            middleMapper.save(middle);
        }
    }

    /**
     * 新增电影信息
     *
     * @param movie
     */
    @Override
    public void addMt(Movie movie) {

    }

    /**
     * 修改电影信息
     *
     * @param movie
     */
    @Override
    public void updateMt(Movie movie) {

    }

    /**
     * 观看电影
     *
     * @param middle
     */
    @Override
    public void seeMovie(Middle middle) {
        //根据电影Id，查询用户是否拥有此电影票，用户可以买多张
        List<Long> userMt = middleMapper.getByMT(middle.getMovie_ticket_id());
        //如果不包含用户id，说明用户没有买过该电影票
        if (!userMt.contains(middle.getUser_id())) {
            throw new RuntimeException("未购买此电影票");
        }
        //查询电影票信息
        Movie movie = movieMapper.getById(middle.getMovie_ticket_id());
        /*//查询中间表信息
        Middle mStatus = middleMapper.loadById(middle.getId());
        //判断电影票是否已经使用
        if (mStatus.getStatus() == 1) {
            throw new RuntimeException("该电影票已经使用");
        }*/
        //判断电影是否已经结束
        if (!movie.getEnd_time().after(new Date())) { //判断当前时间是是否在电影结束时间之后
            throw new RuntimeException("电影结束,您的电影票已过期");
        }
        //修改中间表的数据
        List<Middle> middles1 = middleMapper.getByUserId(middle.getUser_id());
        Middle middle1 = middles1.get(0);
        middle1.setStatus(1);
        middleMapper.updateMiddle(middle1);
    }
}
